In [1]:
import boto
import pandas as pd
import numpy as np
import cufflinks as cf
import scipy.stats as stats
from scipy.stats import chi2_contingency
import plotly.graph_objs as go
import plotly.offline as py
from plotly import tools
import statsmodels.formula.api as sm

cf.go_offline()
py.init_notebook_mode()

c = boto.connect_s3()
b = c.get_bucket('nichung-datasets')

Load CSV and assign to dataframe

In [16]:
mergeNY13_df = pd.read_csv('s3:/nichung-datasets/ss13ny.csv')
In [25]:
mergeNY14_df = pd.read_csv('s3:/nichung-datasets/ss14ny.csv')
In [7]:
mergeNY15_df = pd.read_csv('s3:/nichung-datasets/ss15ny.csv')
In [8]:
ny_puma_df = pd.read_csv('s3:/nichung-datasets/puma_ny.csv')

remove unnecessary columns and double-check NaN values

In [18]:
mergeNY13_df.drop(mergeNY13_df.columns[[0, 1, 2]], axis=1)
Out[18]:
RT_x SERIALNO SPORDER PUMA ST_x ADJINC_x PWGTP AGEP CIT CITWP ... wgtp72 wgtp73 wgtp74 wgtp75 wgtp76 wgtp77 wgtp78 wgtp79 wgtp80 age_group_13
0 P 10 1.0 1201.0 36.0 1007549.0 154.0 78.0 1.0 NaN ... 166 166 44 127 267 260 259 161 49 >65
1 P 27 1.0 1000.0 36.0 1007549.0 30.0 68.0 4.0 1980.0 ... 38 59 43 35 31 7 28 35 10 >65
2 P 27 2.0 1000.0 36.0 1007549.0 32.0 58.0 4.0 2013.0 ... 38 59 43 35 31 7 28 35 10 55-64
3 P 27 3.0 1000.0 36.0 1007549.0 43.0 24.0 5.0 NaN ... 38 59 43 35 31 7 28 35 10 18-24
4 P 36 1.0 4011.0 36.0 1007549.0 95.0 78.0 1.0 NaN ... 97 181 96 27 95 27 26 154 95 >65
5 P 58 1.0 1500.0 36.0 1007549.0 23.0 52.0 1.0 NaN ... 6 10 35 32 7 23 38 7 27 45-54
6 P 58 2.0 1500.0 36.0 1007549.0 37.0 54.0 1.0 NaN ... 6 10 35 32 7 23 38 7 27 45-54
7 P 58 3.0 1500.0 36.0 1007549.0 32.0 16.0 1.0 NaN ... 6 10 35 32 7 23 38 7 27 <18
8 P 58 4.0 1500.0 36.0 1007549.0 44.0 9.0 1.0 NaN ... 6 10 35 32 7 23 38 7 27 <18
9 P 58 5.0 1500.0 36.0 1007549.0 44.0 12.0 1.0 NaN ... 6 10 35 32 7 23 38 7 27 <18
10 P 61 1.0 3808.0 36.0 1007549.0 89.0 19.0 1.0 NaN ... 0 0 0 0 0 0 0 0 0 <18
11 P 72 1.0 2801.0 36.0 1007549.0 151.0 61.0 1.0 NaN ... 143 162 150 156 155 241 297 224 279 55-64
12 P 72 2.0 2801.0 36.0 1007549.0 168.0 60.0 1.0 NaN ... 143 162 150 156 155 241 297 224 279 55-64
13 P 72 3.0 2801.0 36.0 1007549.0 155.0 26.0 1.0 NaN ... 143 162 150 156 155 241 297 224 279 25-34
14 P 92 1.0 4003.0 36.0 1007549.0 115.0 50.0 2.0 NaN ... 97 102 98 115 224 37 140 104 190 45-54
15 P 92 2.0 4003.0 36.0 1007549.0 110.0 28.0 1.0 NaN ... 97 102 98 115 224 37 140 104 190 25-34
16 P 92 3.0 4003.0 36.0 1007549.0 137.0 21.0 1.0 NaN ... 97 102 98 115 224 37 140 104 190 18-24
17 P 92 4.0 4003.0 36.0 1007549.0 93.0 2.0 1.0 NaN ... 97 102 98 115 224 37 140 104 190 <18
18 P 99 1.0 4111.0 36.0 1007549.0 47.0 69.0 2.0 NaN ... 67 74 15 13 82 54 14 78 52 >65
19 P 112 1.0 3105.0 36.0 1007549.0 346.0 59.0 1.0 NaN ... 333 397 585 335 344 355 343 594 377 55-64
20 P 112 2.0 3105.0 36.0 1007549.0 374.0 52.0 1.0 NaN ... 333 397 585 335 344 355 343 594 377 45-54
21 P 112 3.0 3105.0 36.0 1007549.0 311.0 11.0 1.0 NaN ... 333 397 585 335 344 355 343 594 377 <18
22 P 112 4.0 3105.0 36.0 1007549.0 309.0 7.0 1.0 NaN ... 333 397 585 335 344 355 343 594 377 <18
23 P 119 1.0 3105.0 36.0 1007549.0 353.0 30.0 4.0 2008.0 ... 617 482 383 325 336 373 320 99 630 25-34
24 P 119 2.0 3105.0 36.0 1007549.0 215.0 34.0 4.0 2010.0 ... 617 482 383 325 336 373 320 99 630 25-34
25 P 133 1.0 704.0 36.0 1007549.0 26.0 58.0 1.0 NaN ... 10 40 27 29 47 28 47 26 10 55-64
26 P 133 2.0 704.0 36.0 1007549.0 26.0 61.0 1.0 NaN ... 10 40 27 29 47 28 47 26 10 55-64
27 P 133 3.0 704.0 36.0 1007549.0 52.0 21.0 1.0 NaN ... 10 40 27 29 47 28 47 26 10 18-24
28 P 143 1.0 3201.0 36.0 1007549.0 81.0 59.0 1.0 NaN ... 90 24 82 152 89 86 125 97 22 55-64
29 P 143 2.0 3201.0 36.0 1007549.0 77.0 60.0 1.0 NaN ... 90 24 82 152 89 86 125 97 22 55-64
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
203213 NaN 1486318 NaN NaN NaN NaN NaN NaN NaN NaN ... 243 265 142 48 161 261 165 134 45 NaN
203214 NaN 1486536 NaN NaN NaN NaN NaN NaN NaN NaN ... 45 46 54 53 51 98 52 16 13 NaN
203215 NaN 1486770 NaN NaN NaN NaN NaN NaN NaN NaN ... 44 39 246 225 132 146 144 148 226 NaN
203216 NaN 1486798 NaN NaN NaN NaN NaN NaN NaN NaN ... 63 34 11 59 29 66 33 10 52 NaN
203217 NaN 1486875 NaN NaN NaN NaN NaN NaN NaN NaN ... 76 20 78 22 75 73 70 125 116 NaN
203218 NaN 1486919 NaN NaN NaN NaN NaN NaN NaN NaN ... 202 217 63 302 208 192 56 189 229 NaN
203219 NaN 1486967 NaN NaN NaN NaN NaN NaN NaN NaN ... 96 18 61 60 54 18 64 61 18 NaN
203220 NaN 1487130 NaN NaN NaN NaN NaN NaN NaN NaN ... 59 39 39 59 33 34 62 39 42 NaN
203221 NaN 1487163 NaN NaN NaN NaN NaN NaN NaN NaN ... 144 225 141 227 232 42 43 146 139 NaN
203222 NaN 1487478 NaN NaN NaN NaN NaN NaN NaN NaN ... 516 589 335 114 385 569 355 373 100 NaN
203223 NaN 1487531 NaN NaN NaN NaN NaN NaN NaN NaN ... 58 30 27 27 7 31 45 23 29 NaN
203224 NaN 1487782 NaN NaN NaN NaN NaN NaN NaN NaN ... 296 47 158 299 49 44 166 175 155 NaN
203225 NaN 1488015 NaN NaN NaN NaN NaN NaN NaN NaN ... 104 193 136 212 97 103 130 31 235 NaN
203226 NaN 1488179 NaN NaN NaN NaN NaN NaN NaN NaN ... 17 17 18 5 4 19 18 16 16 NaN
203227 NaN 1488579 NaN NaN NaN NaN NaN NaN NaN NaN ... 126 26 25 142 85 25 169 147 93 NaN
203228 NaN 1489445 NaN NaN NaN NaN NaN NaN NaN NaN ... 51 82 15 14 53 47 47 88 13 NaN
203229 NaN 1489522 NaN NaN NaN NaN NaN NaN NaN NaN ... 229 43 151 142 147 42 122 152 46 NaN
203230 NaN 1489607 NaN NaN NaN NaN NaN NaN NaN NaN ... 151 28 130 105 97 26 96 173 155 NaN
203231 NaN 1489829 NaN NaN NaN NaN NaN NaN NaN NaN ... 195 121 117 31 195 112 114 212 33 NaN
203232 NaN 1490058 NaN NaN NaN NaN NaN NaN NaN NaN ... 61 100 57 18 18 15 54 57 101 NaN
203233 NaN 1490226 NaN NaN NaN NaN NaN NaN NaN NaN ... 210 203 39 122 135 216 37 145 40 NaN
203234 NaN 1490304 NaN NaN NaN NaN NaN NaN NaN NaN ... 440 339 354 66 209 193 369 63 354 NaN
203235 NaN 1490369 NaN NaN NaN NaN NaN NaN NaN NaN ... 165 178 285 46 160 179 277 174 176 NaN
203236 NaN 1490396 NaN NaN NaN NaN NaN NaN NaN NaN ... 210 206 65 64 59 215 392 222 63 NaN
203237 NaN 1490419 NaN NaN NaN NaN NaN NaN NaN NaN ... 116 103 101 177 106 188 110 107 178 NaN
203238 NaN 1491904 NaN NaN NaN NaN NaN NaN NaN NaN ... 167 288 147 50 46 149 157 47 175 NaN
203239 NaN 1492157 NaN NaN NaN NaN NaN NaN NaN NaN ... 120 20 75 22 70 74 22 74 73 NaN
203240 NaN 1492178 NaN NaN NaN NaN NaN NaN NaN NaN ... 75 81 119 76 24 79 23 22 84 NaN
203241 NaN 1492411 NaN NaN NaN NaN NaN NaN NaN NaN ... 56 36 38 33 34 34 10 12 11 NaN
203242 NaN 1492844 NaN NaN NaN NaN NaN NaN NaN NaN ... 57 113 79 57 59 97 17 21 59 NaN

203243 rows × 514 columns

In [28]:
mergeNY14_df.replace(r'\s+', np.nan, regex=True, inplace=True)
In [33]:
mergeNY14_df.drop(mergeNY14_df.columns[[0, 1, 2]], axis=1)
Out[33]:
RT_x SERIALNO SPORDER PUMA ST_x ADJINC_x PWGTP AGEP CIT CITWP ... wgtp72 wgtp73 wgtp74 wgtp75 wgtp76 wgtp77 wgtp78 wgtp79 wgtp80 age_group_14
0 P 6 1.0 3808.0 36.0 1008425.0 632.0 29.0 1.0 NaN ... 635 1107 916 659 522 597 710 989 168 25-34
1 P 9 1.0 2300.0 36.0 1008425.0 92.0 19.0 1.0 NaN ... 0 0 0 0 0 0 0 0 0 <18
2 P 44 1.0 3107.0 36.0 1008425.0 184.0 48.0 1.0 NaN ... 379 346 58 60 262 180 51 282 220 45-54
3 P 44 2.0 3107.0 36.0 1008425.0 125.0 59.0 1.0 NaN ... 379 346 58 60 262 180 51 282 220 55-64
4 P 44 3.0 3107.0 36.0 1008425.0 241.0 18.0 1.0 NaN ... 379 346 58 60 262 180 51 282 220 <18
5 P 45 1.0 4103.0 36.0 1008425.0 58.0 52.0 4.0 1983 ... 94 65 59 18 56 16 16 102 55 45-54
6 P 45 2.0 4103.0 36.0 1008425.0 69.0 50.0 4.0 2006 ... 94 65 59 18 56 16 16 102 55 45-54
7 P 45 3.0 4103.0 36.0 1008425.0 80.0 19.0 1.0 NaN ... 94 65 59 18 56 16 16 102 55 <18
8 P 65 1.0 1500.0 36.0 1008425.0 4.0 21.0 1.0 NaN ... 0 0 0 0 0 0 0 0 0 18-24
9 P 80 1.0 1500.0 36.0 1008425.0 36.0 60.0 3.0 NaN ... 9 35 11 31 36 10 34 61 42 55-64
10 P 80 2.0 1500.0 36.0 1008425.0 39.0 57.0 1.0 NaN ... 9 35 11 31 36 10 34 61 42 55-64
11 P 81 1.0 4008.0 36.0 1008425.0 109.0 84.0 4.0 1993 ... 117 126 154 33 130 132 127 173 200 >65
12 P 83 1.0 2802.0 36.0 1008425.0 66.0 60.0 1.0 NaN ... 18 16 21 125 65 71 19 115 124 55-64
13 P 83 2.0 2802.0 36.0 1008425.0 63.0 58.0 1.0 NaN ... 18 16 21 125 65 71 19 115 124 55-64
14 P 102 1.0 3705.0 36.0 1008425.0 64.0 37.0 1.0 NaN ... 110 63 66 61 57 62 21 67 112 35-44
15 P 102 2.0 3705.0 36.0 1008425.0 91.0 17.0 1.0 NaN ... 110 63 66 61 57 62 21 67 112 <18
16 P 102 3.0 3705.0 36.0 1008425.0 89.0 15.0 1.0 NaN ... 110 63 66 61 57 62 21 67 112 <18
17 P 102 4.0 3705.0 36.0 1008425.0 64.0 8.0 1.0 NaN ... 110 63 66 61 57 62 21 67 112 <18
18 P 112 1.0 2801.0 36.0 1008425.0 71.0 21.0 1.0 NaN ... 18 22 115 118 26 87 108 15 74 18-24
19 P 143 1.0 1204.0 36.0 1008425.0 281.0 64.0 1.0 NaN ... 287 311 423 284 424 337 297 316 98 55-64
20 P 154 1.0 3313.0 36.0 1008425.0 61.0 70.0 1.0 NaN ... 65 17 110 17 64 55 57 59 67 >65
21 P 154 2.0 3313.0 36.0 1008425.0 62.0 65.0 1.0 NaN ... 65 17 110 17 64 55 57 59 67 55-64
22 P 160 1.0 403.0 36.0 1008425.0 84.0 30.0 1.0 NaN ... 72 72 109 32 119 102 118 83 92 25-34
23 P 160 2.0 403.0 36.0 1008425.0 160.0 5.0 1.0 NaN ... 72 72 109 32 119 102 118 83 92 <18
24 P 176 1.0 4012.0 36.0 1008425.0 42.0 54.0 1.0 NaN ... 42 69 13 47 71 66 36 42 42 45-54
25 P 178 1.0 3103.0 36.0 1008425.0 113.0 60.0 1.0 NaN ... 185 36 110 108 124 115 191 177 113 55-64
26 P 178 2.0 3103.0 36.0 1008425.0 116.0 54.0 1.0 NaN ... 185 36 110 108 124 115 191 177 113 45-54
27 P 190 1.0 3203.0 36.0 1008425.0 75.0 65.0 4.0 1980 ... 75 111 115 21 77 39 33 73 71 55-64
28 P 190 2.0 3203.0 36.0 1008425.0 88.0 58.0 4.0 1980 ... 75 111 115 21 77 39 33 73 71 55-64
29 P 239 1.0 1101.0 36.0 1008425.0 73.0 57.0 1.0 NaN ... 71 114 27 75 140 118 55 73 70 55-64
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
203610 NaN 1494367 NaN NaN NaN NaN NaN NaN NaN NaN ... 35 36 36 31 60 62 38 36 36 NaN
203611 NaN 1494400 NaN NaN NaN NaN NaN NaN NaN NaN ... 33 29 34 136 184 38 134 134 109 NaN
203612 NaN 1494669 NaN NaN NaN NaN NaN NaN NaN NaN ... 27 33 29 44 33 29 9 9 27 NaN
203613 NaN 1495147 NaN NaN NaN NaN NaN NaN NaN NaN ... 58 55 62 196 185 202 193 191 54 NaN
203614 NaN 1495349 NaN NaN NaN NaN NaN NaN NaN NaN ... 83 119 83 23 74 145 131 74 75 NaN
203615 NaN 1495531 NaN NaN NaN NaN NaN NaN NaN NaN ... 110 35 108 107 35 106 197 30 102 NaN
203616 NaN 1495869 NaN NaN NaN NaN NaN NaN NaN NaN ... 61 66 18 108 61 103 111 59 65 NaN
203617 NaN 1495903 NaN NaN NaN NaN NaN NaN NaN NaN ... 192 298 187 181 366 213 388 66 212 NaN
203618 NaN 1495943 NaN NaN NaN NaN NaN NaN NaN NaN ... 120 79 122 123 21 24 75 76 129 NaN
203619 NaN 1496059 NaN NaN NaN NaN NaN NaN NaN NaN ... 154 150 85 83 96 85 77 26 140 NaN
203620 NaN 1496659 NaN NaN NaN NaN NaN NaN NaN NaN ... 1243 2271 1201 357 1205 1217 366 1139 364 NaN
203621 NaN 1496743 NaN NaN NaN NaN NaN NaN NaN NaN ... 89 82 103 86 25 88 126 26 136 NaN
203622 NaN 1497116 NaN NaN NaN NaN NaN NaN NaN NaN ... 44 25 7 23 38 34 24 22 25 NaN
203623 NaN 1497137 NaN NaN NaN NaN NaN NaN NaN NaN ... 1262 690 699 743 223 720 241 711 200 NaN
203624 NaN 1497482 NaN NaN NaN NaN NaN NaN NaN NaN ... 8 25 25 27 27 9 27 35 28 NaN
203625 NaN 1497562 NaN NaN NaN NaN NaN NaN NaN NaN ... 55 51 49 14 82 86 82 83 48 NaN
203626 NaN 1497769 NaN NaN NaN NaN NaN NaN NaN NaN ... 34 60 57 58 63 32 60 32 55 NaN
203627 NaN 1497795 NaN NaN NaN NaN NaN NaN NaN NaN ... 71 257 79 72 476 257 420 270 241 NaN
203628 NaN 1497825 NaN NaN NaN NaN NaN NaN NaN NaN ... 67 58 86 19 21 74 70 65 71 NaN
203629 NaN 1498115 NaN NaN NaN NaN NaN NaN NaN NaN ... 27 24 9 48 29 25 43 27 52 NaN
203630 NaN 1498389 NaN NaN NaN NaN NaN NaN NaN NaN ... 212 38 141 135 40 125 115 39 231 NaN
203631 NaN 1498437 NaN NaN NaN NaN NaN NaN NaN NaN ... 20 65 62 68 67 20 69 67 67 NaN
203632 NaN 1498648 NaN NaN NaN NaN NaN NaN NaN NaN ... 36 133 43 127 141 45 142 43 137 NaN
203633 NaN 1499095 NaN NaN NaN NaN NaN NaN NaN NaN ... 50 84 17 17 14 16 75 56 57 NaN
203634 NaN 1499311 NaN NaN NaN NaN NaN NaN NaN NaN ... 220 33 31 198 114 106 199 150 32 NaN
203635 NaN 1499312 NaN NaN NaN NaN NaN NaN NaN NaN ... 74 70 23 73 22 130 120 78 86 NaN
203636 NaN 1500166 NaN NaN NaN NaN NaN NaN NaN NaN ... 64 61 298 71 69 182 245 245 63 NaN
203637 NaN 1500396 NaN NaN NaN NaN NaN NaN NaN NaN ... 56 53 83 84 89 50 15 54 16 NaN
203638 NaN 1500678 NaN NaN NaN NaN NaN NaN NaN NaN ... 25 140 66 86 84 126 71 76 22 NaN
203639 NaN 1500883 NaN NaN NaN NaN NaN NaN NaN NaN ... 332 197 236 61 352 197 195 335 67 NaN

203640 rows × 519 columns

In [22]:
mergeNY15_df.drop(mergeNY15_df.columns[[0, 1, 2]], axis=1)
Out[22]:
RT_x SERIALNO SPORDER PUMA ST_x ADJINC_x PWGTP AGEP CIT CITWP ... wgtp72 wgtp73 wgtp74 wgtp75 wgtp76 wgtp77 wgtp78 wgtp79 wgtp80 age_group_15
0 P 17 1.0 3806.0 36.0 1001264.0 170.0 25.0 1.0 NaN ... 280 55 345 173 175 162 173 153 150 18-24
1 P 17 2.0 3806.0 36.0 1001264.0 289.0 27.0 1.0 NaN ... 280 55 345 173 175 162 173 153 150 25-34
2 P 23 1.0 3205.0 36.0 1001264.0 80.0 60.0 1.0 NaN ... 69 22 65 89 30 26 25 21 85 55-64
3 P 23 2.0 3205.0 36.0 1001264.0 81.0 61.0 1.0 NaN ... 69 22 65 89 30 26 25 21 85 55-64
4 P 23 3.0 3205.0 36.0 1001264.0 158.0 33.0 1.0 NaN ... 69 22 65 89 30 26 25 21 85 25-34
5 P 23 4.0 3205.0 36.0 1001264.0 102.0 16.0 1.0 NaN ... 69 22 65 89 30 26 25 21 85 <18
6 P 23 5.0 3205.0 36.0 1001264.0 93.0 11.0 1.0 NaN ... 69 22 65 89 30 26 25 21 85 <18
7 P 23 6.0 3205.0 36.0 1001264.0 83.0 8.0 1.0 NaN ... 69 22 65 89 30 26 25 21 85 <18
8 P 46 1.0 4004.0 36.0 1001264.0 88.0 45.0 5.0 NaN ... 77 138 31 144 143 103 96 23 98 35-44
9 P 46 2.0 4004.0 36.0 1001264.0 99.0 49.0 5.0 NaN ... 77 138 31 144 143 103 96 23 98 45-54
10 P 46 3.0 4004.0 36.0 1001264.0 63.0 21.0 4.0 2014.0 ... 77 138 31 144 143 103 96 23 98 18-24
11 P 46 4.0 4004.0 36.0 1001264.0 72.0 10.0 1.0 NaN ... 77 138 31 144 143 103 96 23 98 <18
12 P 51 1.0 1500.0 36.0 1001264.0 36.0 19.0 1.0 NaN ... 0 0 0 0 0 0 0 0 0 <18
13 P 53 1.0 1400.0 36.0 1001264.0 15.0 20.0 4.0 2005.0 ... 0 0 0 0 0 0 0 0 0 18-24
14 P 80 1.0 1500.0 36.0 1001264.0 15.0 53.0 1.0 NaN ... 25 12 16 5 23 4 7 16 15 45-54
15 P 80 2.0 1500.0 36.0 1001264.0 19.0 55.0 1.0 NaN ... 25 12 16 5 23 4 7 16 15 45-54
16 P 80 3.0 1500.0 36.0 1001264.0 39.0 24.0 1.0 NaN ... 25 12 16 5 23 4 7 16 15 18-24
17 P 86 1.0 904.0 36.0 1001264.0 169.0 40.0 1.0 NaN ... 162 56 264 181 152 55 166 51 186 35-44
18 P 86 2.0 904.0 36.0 1001264.0 164.0 45.0 1.0 NaN ... 162 56 264 181 152 55 166 51 186 35-44
19 P 86 3.0 904.0 36.0 1001264.0 149.0 14.0 1.0 NaN ... 162 56 264 181 152 55 166 51 186 <18
20 P 92 1.0 3203.0 36.0 1001264.0 120.0 66.0 1.0 NaN ... 183 124 36 107 192 117 111 201 201 >65
21 P 92 2.0 3203.0 36.0 1001264.0 113.0 67.0 1.0 NaN ... 183 124 36 107 192 117 111 201 201 >65
22 P 92 3.0 3203.0 36.0 1001264.0 150.0 43.0 1.0 NaN ... 183 124 36 107 192 117 111 201 201 35-44
23 P 92 4.0 3203.0 36.0 1001264.0 189.0 19.0 1.0 NaN ... 183 124 36 107 192 117 111 201 201 <18
24 P 118 1.0 200.0 36.0 1001264.0 157.0 37.0 1.0 NaN ... 167 179 161 145 51 141 157 215 208 35-44
25 P 118 2.0 200.0 36.0 1001264.0 153.0 39.0 1.0 NaN ... 167 179 161 145 51 141 157 215 208 35-44
26 P 118 3.0 200.0 36.0 1001264.0 90.0 3.0 1.0 NaN ... 167 179 161 145 51 141 157 215 208 <18
27 P 118 4.0 200.0 36.0 1001264.0 100.0 1.0 1.0 NaN ... 167 179 161 145 51 141 157 215 208 <18
28 P 124 1.0 3805.0 36.0 1001264.0 14.0 28.0 1.0 NaN ... 0 0 0 0 0 0 0 0 0 25-34
29 P 191 1.0 3311.0 36.0 1001264.0 42.0 25.0 1.0 NaN ... 13 48 42 63 36 45 44 45 44 18-24
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
203425 NaN 1506917 NaN NaN NaN NaN NaN NaN NaN NaN ... 62 284 201 212 326 210 324 202 57 NaN
203426 NaN 1506932 NaN NaN NaN NaN NaN NaN NaN NaN ... 101 422 311 588 358 339 343 302 338 NaN
203427 NaN 1507240 NaN NaN NaN NaN NaN NaN NaN NaN ... 119 195 206 123 112 193 116 116 117 NaN
203428 NaN 1507705 NaN NaN NaN NaN NaN NaN NaN NaN ... 97 109 32 107 176 160 188 94 37 NaN
203429 NaN 1508278 NaN NaN NaN NaN NaN NaN NaN NaN ... 62 19 69 61 65 107 62 106 115 NaN
203430 NaN 1508367 NaN NaN NaN NaN NaN NaN NaN NaN ... 262 202 259 66 263 455 217 413 221 NaN
203431 NaN 1508372 NaN NaN NaN NaN NaN NaN NaN NaN ... 73 81 120 72 128 77 77 86 25 NaN
203432 NaN 1508432 NaN NaN NaN NaN NaN NaN NaN NaN ... 49 25 39 37 23 23 26 26 7 NaN
203433 NaN 1508537 NaN NaN NaN NaN NaN NaN NaN NaN ... 408 407 129 368 610 413 665 596 459 NaN
203434 NaN 1508642 NaN NaN NaN NaN NaN NaN NaN NaN ... 136 229 129 211 180 41 157 36 137 NaN
203435 NaN 1508809 NaN NaN NaN NaN NaN NaN NaN NaN ... 74 19 27 83 72 24 69 72 74 NaN
203436 NaN 1508879 NaN NaN NaN NaN NaN NaN NaN NaN ... 48 158 184 165 279 168 50 165 165 NaN
203437 NaN 1508881 NaN NaN NaN NaN NaN NaN NaN NaN ... 201 199 400 363 200 362 390 201 61 NaN
203438 NaN 1509150 NaN NaN NaN NaN NaN NaN NaN NaN ... 50 27 6 45 55 9 25 34 8 NaN
203439 NaN 1509232 NaN NaN NaN NaN NaN NaN NaN NaN ... 10 34 10 11 33 34 36 33 10 NaN
203440 NaN 1509361 NaN NaN NaN NaN NaN NaN NaN NaN ... 23 78 135 22 116 71 71 84 75 NaN
203441 NaN 1509582 NaN NaN NaN NaN NaN NaN NaN NaN ... 51 85 52 14 46 54 11 50 13 NaN
203442 NaN 1509585 NaN NaN NaN NaN NaN NaN NaN NaN ... 108 199 109 33 108 35 205 107 163 NaN
203443 NaN 1509686 NaN NaN NaN NaN NaN NaN NaN NaN ... 355 203 191 233 356 69 333 212 355 NaN
203444 NaN 1509726 NaN NaN NaN NaN NaN NaN NaN NaN ... 182 103 173 166 95 170 29 107 94 NaN
203445 NaN 1510044 NaN NaN NaN NaN NaN NaN NaN NaN ... 417 232 206 281 229 68 458 236 76 NaN
203446 NaN 1510294 NaN NaN NaN NaN NaN NaN NaN NaN ... 17 58 14 51 16 16 18 15 47 NaN
203447 NaN 1510555 NaN NaN NaN NaN NaN NaN NaN NaN ... 30 64 59 52 37 34 36 39 60 NaN
203448 NaN 1510939 NaN NaN NaN NaN NaN NaN NaN NaN ... 72 71 77 28 149 56 68 67 27 NaN
203449 NaN 1511041 NaN NaN NaN NaN NaN NaN NaN NaN ... 4 16 27 26 16 14 26 4 16 NaN
203450 NaN 1511052 NaN NaN NaN NaN NaN NaN NaN NaN ... 26 29 5 17 3 18 16 5 16 NaN
203451 NaN 1511154 NaN NaN NaN NaN NaN NaN NaN NaN ... 64 42 37 37 49 70 61 43 66 NaN
203452 NaN 1512074 NaN NaN NaN NaN NaN NaN NaN NaN ... 438 298 306 463 291 493 93 80 260 NaN
203453 NaN 1512470 NaN NaN NaN NaN NaN NaN NaN NaN ... 311 233 219 224 386 252 215 204 383 NaN
203454 NaN 1513031 NaN NaN NaN NaN NaN NaN NaN NaN ... 113 595 641 109 421 369 104 392 100 NaN

203455 rows × 519 columns

In [38]:
import os, math
from filechunkio import FileChunkIO

mergeNY13_df.to_csv('/tmp/ss13ny.csv')
# get file info
source_path = '/tmp/ss13ny.csv'
source_size = os.stat(source_path).st_size

# create multipart upload request
mp = b.initiate_multipart_upload(os.path.basename(source_path))

# use chunk size of 50 MiB
chunk_size = 52428800
chunk_count = int(math.ceil(source_size / float(chunk_size)))
In [40]:
# send the file parts, using FileChunkIO to create a file-like object
# that points to a certain byte range within the original file.
# set bytes to never exceed original file size.

for i in range(chunk_count):
    offset = chunk_size * i
    bytes = min(chunk_size, source_size - offset)
    with FileChunkIO(source_path, 'r', offset=offset,
                    bytes=bytes) as fp:
        mp.upload_part_from_file(fp, part_num=i + 1)

# finish upload
mp.complete_upload()
Out[40]:
<CompleteMultiPartUpload: nichung-datasets.ss13ny.csv>
In [41]:
mergeNY14_df.to_csv('/tmp/ss14ny.csv')
# get file info
source_path = '/tmp/ss14ny.csv'
source_size = os.stat(source_path).st_size

# create multipart upload request
mp = b.initiate_multipart_upload(os.path.basename(source_path))

# use chunk size of 50 MiB
chunk_size = 52428800
chunk_count = int(math.ceil(source_size / float(chunk_size)))

# send the file parts, using FileChunkIO to create a file-like object
# that points to a certain byte range within the original file.
# set bytes to never exceed original file size.

for i in range(chunk_count):
    offset = chunk_size * i
    bytes = min(chunk_size, source_size - offset)
    with FileChunkIO(source_path, 'r', offset=offset,
                    bytes=bytes) as fp:
        mp.upload_part_from_file(fp, part_num=i + 1)

# finish upload
mp.complete_upload()
Out[41]:
<CompleteMultiPartUpload: nichung-datasets.ss14ny.csv>
In [42]:
mergeNY15_df.to_csv('/tmp/ss15ny.csv')
# get file info
source_path = '/tmp/ss15ny.csv'
source_size = os.stat(source_path).st_size

# create multipart upload request
mp = b.initiate_multipart_upload(os.path.basename(source_path))

# use chunk size of 50 MiB
chunk_size = 52428800
chunk_count = int(math.ceil(source_size / float(chunk_size)))

# send the file parts, using FileChunkIO to create a file-like object
# that points to a certain byte range within the original file.
# set bytes to never exceed original file size.

for i in range(chunk_count):
    offset = chunk_size * i
    bytes = min(chunk_size, source_size - offset)
    with FileChunkIO(source_path, 'r', offset=offset,
                    bytes=bytes) as fp:
        mp.upload_part_from_file(fp, part_num=i + 1)

# finish upload
mp.complete_upload()
Out[42]:
<CompleteMultiPartUpload: nichung-datasets.ss15ny.csv>

r a c e & o t h e r s e s i n d i c a t o r s

Questions (test):

  • what does internet access look like against health insurance coverage type, by age group?
  • what does internet access look like against health insurance coverage type, by age group?

In [9]:
#health insurance coverage

#by age
coverage_by_age_13 = pd.crosstab(mergeNY13_df.HICOV, mergeNY13_df.age_group_13, margins=True)
coverage_by_age_13.columns = ['<18', '18-24', '25-34', '35-44', '45-54', '55-64', '>65', 'rowtotal']
coverage_by_age_13.index= ["yes","no","coltotal"] 

coverage_by_age_13
Out[9]:
<18 18-24 25-34 35-44 45-54 55-64 >65 rowtotal
yes 13296 19113 20153 26300 24851 41989 31037 176739
no 2575 4504 3258 2968 2025 1996 208 17534
coltotal 15871 23617 23411 29268 26876 43985 31245 194273
In [10]:
#by race
coverage_by_race_13 = pd.crosstab(mergeNY13_df.RAC1P, mergeNY13_df.HICOV, margins=True)
coverage_by_race_13.columns= ["yes","no","rowtotal"] 
coverage_by_race_13.index = ['white', 'black', 'american indian', 'alaska native', 'catch-all native', 'asian', 'pacific islander', 'other', '2+ races', 'coltotal']

insured_by_race_13 = coverage_by_race_13/coverage_by_race_13.ix['coltotal', 'rowtotal']

insured_by_race_13_no_total = insured_by_race_13.ix[0:9,0:2]
insured_by_race_13_no_total
Out[10]:
yes no
white 0.659995 0.049229
black 0.115377 0.015268
american indian 0.001861 0.000464
alaska native 0.000005 0.000010
catch-all native 0.001081 0.000163
asian 0.064313 0.009563
pacific islander 0.000408 0.000046
other 0.043586 0.011995
2+ races 0.023628 0.003008
In [11]:
insured_by_race_13_no_total.iplot(kind='bar', barmode='stack', filename='charts/health-coverage-by-race.html')
In [12]:
#by race
coverage_by_race_13 = pd.crosstab(mergeNY13_df.HICOV, mergeNY13_df.RAC1P, margins=True)
coverage_by_race_13.columns = ['white', 'black', 'american indian', 'alaska native', 'catch-all native', 'asian', 'pacific islander', 'other', '2+ races', 'rowtotal']
coverage_by_race_13.index = ["yes","no","coltotal"]

coverage_by_race_13_no_total = coverage_by_race_13.ix[0:2,0:9]
coverage_by_race_13_no_total
Out[12]:
white black american indian alaska native catch-all native asian pacific islander other 2+ races
yes 129468 22633 365 1 212 12616 80 8550 4635
no 9657 2995 91 2 32 1876 9 2353 590
In [13]:
coverage_by_race_13_no_total.iplot(kind='bar', barmode='stack', filename='charts/health-coverage-by-race.html')
In [14]:
#private coverage
privcov_by_age_13 = pd.crosstab(mergeNY13_df.PRIVCOV, mergeNY13_df.age_group_13, margins=True)
privcov_by_age_13.columns = ['<18', '18-24', '25-34', '35-44', '45-54', '55-64', '>65', 'rowtotal']
privcov_by_age_13.index= ["yes","no","coltotal"]

#public coverage
pubcov_by_age_13 = pd.crosstab(mergeNY13_df.PUBCOV, mergeNY13_df.age_group_13, margins=True)
pubcov_by_age_13.columns = ['<18', '18-24', '25-34', '35-44', '45-54', '55-64', '>65', 'rowtotal']
pubcov_by_age_13.index= ["yes","no","coltotal"]

#internet access
access_by_age_13 = pd.crosstab(mergeNY13_df.ACCESS, mergeNY13_df.age_group_13, margins=True)
access_by_age_13.columns = ['<18', '18-24', '25-34', '35-44', '45-54', '55-64', '>65', 'rowtotal']
access_by_age_13.index= ["yes","kinda", "no","coltotal"]
In [15]:
pubcov_by_age_13 = pd.crosstab(mergeNY13_df.PUBCOV, mergeNY13_df.age_group_13, margins=True);
pubcov_by_age_13.columns = ['<18', '18-24', '25-34', '35-44', '45-54', '55-64', '>65', 'rowtotal'];
pubcov_by_age_13.index= ["yes","no","coltotal"];
access_by_age_13 = pd.crosstab(mergeNY13_df.ACCESS, mergeNY13_df.age_group_13, margins=True);
access_by_age_13.columns = ['<18', '18-24', '25-34', '35-44', '45-54', '55-64', '>65', 'rowtotal'];
access_by_age_13.index= ["yes","kinda", "no","coltotal"];
In [16]:
access_by_age_13 = pd.crosstab(mergeNY13_df.ACCESS, mergeNY13_df.age_group_13, margins=True);
access_by_age_13.columns = ['<18', '18-24', '25-34', '35-44', '45-54', '55-64', '>65', 'rowtotal'];
access_by_age_13.index= ["yes","kinda", "no","coltotal"];
In [17]:
# select crosstab by column and convert to percentile per age group
privc_less18_13 = privcov_by_age_13['<18'];
private_less18_13 = privc_less18_13/privc_less18_13.ix['coltotal', 'rowtotal'];
yes_private_less18_13 = private_less18_13[0];

privc_1824_13 = privcov_by_age_13['18-24'];
private_1824_13 = privc_1824_13/privc_1824_13.ix['coltotal', 'rowtotal'];
yes_private_1824_13 = private_1824_13[0];

privc_2534_13 = privcov_by_age_13['25-34'];
private_2534_13 = privc_2534_13/privc_2534_13.ix['coltotal', 'rowtotal'];
yes_private_2534_13 = private_2534_13[0];

privc_3544_13 = privcov_by_age_13['35-44'];
private_3544_13 = privc_3544_13/privc_3544_13.ix['coltotal', 'rowtotal'];
yes_private_3544_13 = private_3544_13[0];

privc_4554_13 = privcov_by_age_13['45-54'];
private_4554_13 = privc_4554_13/privc_4554_13.ix['coltotal', 'rowtotal'];
yes_private_4554_13 = private_4554_13[0];

privc_5564_13 = privcov_by_age_13['55-64'];
private_5564_13 = privc_5564_13/privc_5564_13.ix['coltotal', 'rowtotal'];
yes_private_5564_13 = private_5564_13[0];

privc_more65_13 = privcov_by_age_13['>65'];
private_more65_13 = privc_more65_13/privc_more65_13.ix['coltotal', 'rowtotal'];
yes_private_more65_13 = private_more65_13[0];

# select crosstab by column and convert to percentile per age group
pubc_less18_13 = pubcov_by_age_13['<18'];
public_less18_13 = pubc_less18_13/pubc_less18_13.ix['coltotal', 'rowtotal'];
yes_public_less18_13 = public_less18_13[0];

pubc_1824_13 = pubcov_by_age_13['18-24'];
public_1824_13 = pubc_1824_13/pubc_1824_13.ix['coltotal', 'rowtotal'];
yes_public_1824_13 = public_1824_13[0];

pubc_2534_13 = pubcov_by_age_13['25-34'];
public_2534_13 = pubc_2534_13/pubc_2534_13.ix['coltotal', 'rowtotal'];
yes_public_2534_13 = public_2534_13[0];

pubc_3544_13 = pubcov_by_age_13['35-44'];
public_3544_13 = pubc_3544_13/pubc_3544_13.ix['coltotal', 'rowtotal'];
yes_public_3544_13 = public_3544_13[0];

pubc_4554_13 = pubcov_by_age_13['45-54'];
public_4554_13 = pubc_4554_13/pubc_4554_13.ix['coltotal', 'rowtotal'];
yes_public_4554_13 = public_4554_13[0];

pubc_5564_13 = pubcov_by_age_13['55-64'];
public_5564_13 = pubc_5564_13/pubc_5564_13.ix['coltotal', 'rowtotal'];
yes_public_5564_13 = public_5564_13[0];

pubc_more65_13 = pubcov_by_age_13['>65'];
public_more65_13 = pubc_more65_13/pubc_more65_13.ix['coltotal', 'rowtotal'];
yes_public_more65_13 = public_more65_13[0];

# select crosstab by column and convert to percentile per age group
iacc_less18_13 = access_by_age_13['<18'];
access_less18_13 = iacc_less18_13/iacc_less18_13.ix['coltotal', 'rowtotal'];
yes_access_less18_13 = access_less18_13[0];

iacc_1824_13 = access_by_age_13['18-24'];
access_1824_13 = iacc_1824_13/iacc_1824_13.ix['coltotal', 'rowtotal'];
yes_access_1824_13 = access_1824_13[0];

iacc_2534_13 = access_by_age_13['25-34'];
access_2534_13 = iacc_2534_13/iacc_2534_13.ix['coltotal', 'rowtotal'];
yes_access_2534_13 = access_2534_13[0];

iacc_3544_13 = access_by_age_13['35-44'];
access_3544_13 = iacc_3544_13/iacc_3544_13.ix['coltotal', 'rowtotal'];
yes_access_3544_13 = access_3544_13[0];

iacc_4554_13 = access_by_age_13['45-54'];
access_4554_13 = iacc_4554_13/iacc_4554_13.ix['coltotal', 'rowtotal'];
yes_access_4554_13 = access_4554_13[0];

iacc_5564_13 = access_by_age_13['55-64'];
access_5564_13 = iacc_5564_13/iacc_5564_13.ix['coltotal', 'rowtotal'];
yes_access_5564_13 = access_5564_13[0];

iacc_more65_13 = access_by_age_13['>65'];
access_more65_13 = iacc_more65_13/iacc_more65_13.ix['coltotal', 'rowtotal'];
yes_access_more65_13 = access_more65_13[0];
In [18]:
# Create and style traces
yes_acc_13 = go.Bar(
    x=['< 18', '18-24', '25-34', '35-44', '45-54', '55-64', '> 64'],
    y=[yes_access_less18_13, yes_access_1824_13, yes_access_2534_13, yes_access_3544_13, yes_access_4554_13, yes_access_5564_13, yes_access_more65_13],
    name = 'internet access'
);

yes_privc_13 = go.Bar(
    x=['< 18', '18-24', '25-34', '35-44', '45-54', '55-64', '> 64'],
    y=[yes_private_less18_13, yes_private_1824_13, yes_private_2534_13, yes_private_3544_13, yes_private_4554_13, yes_private_5564_13, yes_private_more65_13],
    name = 'private health insurance'
);

yes_pubc_13 = go.Bar(
    x=['< 18', '18-24', '25-34', '35-44', '45-54', '55-64', '> 64'],
    y=[yes_public_less18_13, yes_public_1824_13, yes_public_2534_13, yes_public_3544_13, yes_public_4554_13, yes_public_5564_13, yes_public_more65_13],
    name = 'public health insurance'
);

data = [yes_acc_13, yes_pubc_13, yes_privc_13]

# Edit the layout
layout = go.Layout(
    title = 'Internet Access and Health Insurance by Type for New Yorkers by Age, 2013-15',
    xaxis = dict(title = 'Age Group'),
    yaxis = dict(title = 'Percent of Population'),
    barmode = 'group'
)

fig = go.Figure(data=data, layout=layout)
py.iplot(fig, filename='internet-access-and-health-insurance-type-by-age-13')

race eda

Questions:

  • distribution of race?
  • internet access type by race?
In [19]:
# chi-squared goodness-of-fit test for categorical variable 'RAC1P'
# todo
In [20]:
#race by age group
race_by_age_13 = pd.crosstab(mergeNY13_df.RAC1P, mergeNY13_df.age_group_13, margins=True);
race_by_age_13.columns = ['<18', '18-24', '25-34', '35-44', '45-54', '55-64', '>65', 'rowtotal'];
race_by_age_13.index= ['white', 'black', 'american indian', 'alaska native', 'catch-all native', 'asian', 'pacific islander', 'other', '2+ races', 'coltotal'];
race_by_age_13
Out[20]:
<18 18-24 25-34 35-44 45-54 55-64 >65 rowtotal
white 10167 15445 15822 21520 20756 28636 25524 137870
black 2454 3324 3186 3715 3107 6344 3266 25396
american indian 35 55 49 75 65 124 51 454
alaska native 0 0 1 1 0 1 0 3
catch-all native 26 30 23 39 18 81 22 239
asian 1417 2254 2217 2078 1743 3263 1381 14353
pacific islander 11 16 14 15 7 21 4 88
other 1215 1819 1577 1333 805 3344 678 10771
2+ races 546 674 522 492 375 2171 319 5099
coltotal 15871 23617 23411 29268 26876 43985 31245 194273
In [21]:
# chi-squared test of independence to test null hypothesis 
# that there is no association between race and age 
observed = race_by_age_13.ix[0:9,0:7]

observed
Out[21]:
<18 18-24 25-34 35-44 45-54 55-64 >65
white 10167 15445 15822 21520 20756 28636 25524
black 2454 3324 3186 3715 3107 6344 3266
american indian 35 55 49 75 65 124 51
alaska native 0 0 1 1 0 1 0
catch-all native 26 30 23 39 18 81 22
asian 1417 2254 2217 2078 1743 3263 1381
pacific islander 11 16 14 15 7 21 4
other 1215 1819 1577 1333 805 3344 678
2+ races 546 674 522 492 375 2171 319
In [22]:
# expected
expected = np.outer(race_by_age_13['rowtotal'][0:9],
                   race_by_age_13.ix['coltotal'][0:7]) / 194273

expected = pd.DataFrame(expected)

expected.columns = ['<18', '18-24', '25-34', '35-44', '45-54', '55-64', '>65']
expected.index= ['white', 'black', 'american indian', 'alaska native', 'catch-all native', 'asian', 'pacific islander', 'other', '2+ races']

expected
Out[22]:
<18 18-24 25-34 35-44 45-54 55-64 >65
white 11263 16760 16614 20770 19073 31214 22173
black 2074 3087 3060 3826 3513 5749 4084
american indian 37 55 54 68 62 102 73
alaska native 0 0 0 0 0 0 0
catch-all native 19 29 28 36 33 54 38
asian 1172 1744 1729 2162 1985 3249 2308
pacific islander 7 10 10 13 12 19 14
other 879 1309 1297 1622 1490 2438 1732
2+ races 416 619 614 768 705 1154 820
In [29]:
stats.chi2_contingency(observed=observed)
Out[29]:
(5559.9917683424082,
 0.0,
 48,
 array([[  1.12631955e+04,   1.67603104e+04,   1.66141181e+04,
           2.07706638e+04,   1.90731297e+04,   3.12148984e+04,
           2.21736842e+04],
        [  2.07470887e+03,   3.08729124e+03,   3.06036225e+03,
           3.82600839e+03,   3.51331835e+03,   5.74986262e+03,
           4.08444828e+03],
        [  3.70892198e+01,   5.51909838e+01,   5.47095788e+01,
           6.83969054e+01,   6.28069984e+01,   1.02789322e+02,
           7.30169916e+01],
        [  2.45082950e-01,   3.64698131e-01,   3.61517040e-01,
           4.51961930e-01,   4.15024218e-01,   6.79224596e-01,
           4.82491134e-01],
        [  1.95249417e+01,   2.90542844e+01,   2.88008576e+01,
           3.60063004e+01,   3.30635961e+01,   5.41115595e+01,
           3.84384603e+01],
        [  1.17255853e+03,   1.74483742e+03,   1.72961803e+03,
           2.16233653e+03,   1.98561420e+03,   3.24963688e+03,
           2.30839841e+03],
        [  7.18909987e+00,   1.06978118e+01,   1.06044999e+01,
           1.32575499e+01,   1.21740437e+01,   1.99239215e+01,
           1.41530733e+01],
        [  8.79929486e+02,   1.30938786e+03,   1.29796668e+03,
           1.62269398e+03,   1.49007529e+03,   2.43864271e+03,
           1.73230400e+03],
        [  4.16559321e+02,   6.19865257e+02,   6.14458463e+02,
           7.68184627e+02,   7.05402830e+02,   1.15445541e+03,
           8.20074097e+02]]))
In [24]:
# chi-squared test of independence to test null hypothesis 
# that there is no association between access and race 
access_by_race_13 = pd.crosstab(mergeNY13_df.RAC1P, mergeNY13_df.ACCESS, margins=True);
access_by_race_13.columns = ['yes', 'yes w/o sub', 'no', 'rowtotal'];
access_by_race_13.index= ['white', 'black', 'american indian', 'alaska native', 'catch-all native', 'asian', 'pacific islander', 'other', '2+ races', 'coltotal'];
access_by_race_13
Out[24]:
yes yes w/o sub no rowtotal
white 109408 4306 18614 132328
black 17429 1103 4612 23144
american indian 298 36 104 438
alaska native 3 0 0 3
catch-all native 140 4 90 234
asian 12386 361 1205 13952
pacific islander 56 5 20 81
other 8000 455 1850 10305
2+ races 4023 243 590 4856
coltotal 151743 6513 27085 185341
In [25]:
race_age_observed = access_by_race_13.ix[0:9,0:3]

race_age_observed
Out[25]:
yes yes w/o sub no
white 109408 4306 18614
black 17429 1103 4612
american indian 298 36 104
alaska native 3 0 0
catch-all native 140 4 90
asian 12386 361 1205
pacific islander 56 5 20
other 8000 455 1850
2+ races 4023 243 590
In [28]:
chi2_contingency(race_age_observed)
stats.chi2_contingency(race_age_observed)
Out[28]:
(1547.6352059452531,
 0.0,
 16,
 array([[  1.08340020e+05,   4.65008964e+03,   1.93378901e+04],
        [  1.89485327e+04,   8.13294803e+02,   3.38217254e+03],
        [  3.58600817e+02,   1.53915971e+01,   6.40075860e+01],
        [  2.45616998e+00,   1.05421898e-01,   4.38408123e-01],
        [  1.91581258e+02,   8.22290805e+00,   3.41958336e+01],
        [  1.14228278e+04,   4.90282107e+02,   2.03889005e+03],
        [  6.63165894e+01,   2.84639125e+00,   1.18370193e+01],
        [  8.43694388e+03,   3.62124220e+02,   1.50593190e+03],
        [  3.97572047e+03,   1.70642912e+02,   7.09636616e+02]]))
In [30]:
age = mergeNY13_df.AGEP
fam_income = mergeNY13_df.FINCP
race = mergeNY13_df.RAC1P
In [31]:
result = sm.ols(formula="age ~ fam_income + race", data=mergeNY13_df).fit()
print result.params
Intercept     4.083207e+01
fam_income    5.646131e-07
race         -1.286298e+00
dtype: float64
In [32]:
print result.summary()
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                    age   R-squared:                       0.017
Model:                            OLS   Adj. R-squared:                  0.017
Method:                 Least Squares   F-statistic:                     1361.
Date:                Tue, 14 Mar 2017   Prob (F-statistic):               0.00
Time:                        16:50:35   Log-Likelihood:            -7.0019e+05
No. Observations:              154073   AIC:                         1.400e+06
Df Residuals:                  154070   BIC:                         1.400e+06
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept     40.8321      0.098    416.281      0.000      40.640      41.024
fam_income  5.646e-07   5.12e-07      1.102      0.270    -4.4e-07    1.57e-06
race          -1.2863      0.025    -51.878      0.000      -1.335      -1.238
==============================================================================
Omnibus:                    31812.229   Durbin-Watson:                   1.270
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             6355.232
Skew:                           0.090   Prob(JB):                         0.00
Kurtosis:                       2.021   Cond. No.                     2.63e+05
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 2.63e+05. This might indicate that there are
strong multicollinearity or other numerical problems.
In [9]:
mergeNY14_df.GRPIP.describe()
Out[9]:
count     203640
unique       102
top             
freq      143089
Name: GRPIP, dtype: object
In [ ]:
 
In [64]:
mergeNY13_df.GRPIP.iplot(kind='box', filename='rent-of-income-13')
In [70]:
grpip_14 = mergeNY14_df.GRPIP.apply(pd.to_numeric, errors='coerce')
In [71]:
grpip_14.iplot(kind='box', filename='rent-of-income-14')
In [65]:
mergeNY15_df.GRPIP.iplot(kind='box', filename='rent-of-income-15')
In [80]:
mergeNY13_df.FINCP.iplot(kind='box', filename='fam_income_13')
In [79]:
mergeNY13_df.HINCP.iplot(kind='box', filename='hh_income_13')
In [78]:
mergeNY14_df.FINCP.iplot(kind='box', filename='fam_income_14')
In [77]:
mergeNY15_df.FINCP.iplot(kind='box', filename='fam_income_15')
In [ ]: